<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   谢益辉: 也谈提高R语言的运算效率  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript">
   MathJax.Hub.Config({
          tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
          TeX: {equationNumbers: {autoNumber: "AMS"}}
        });
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://cos.name/2009/12/improve-r-computation-efficiency/",
                  host: "http://cos.name",
                  prePath: "http://cos.name",
                  scheme: "http",
                  pathBase: "http://cos.name/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466463032: Accept with keywords: (title(0.333333333333):门户网站,统计学,R语言,服务平台,中国,效率, topn(0.433333333333):语言,程序,四则运算,编译,R语言,数据挖掘,数据分析,例子,可视化,计算,文章,速度,数据,向量,底层,函数,差异,编程,矩阵,用户,P值,问题,C++,效率,统计学,方法,代码,系统,评论,论坛).-->
 </head>
 <body class="single single-post postid-1796 single-format-standard sidebar" onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    谢益辉: 也谈提高R语言的运算效率
   </h1>
  </div>
  <div class="container" id="xmain">
   <div class="hfeed site" id="page">
    <header class="site-header" id="masthead" role="banner">
     <div id="cos-logo">
      <a href="http://cos.name/">
       <img src="http://cos.name/wp-content/themes/COS-kermesinus/images/headers/cos-logo.png"/>
      </a>
     </div>
     <div class="navbar" id="navbar">
      <nav class="navigation main-navigation" id="site-navigation" role="navigation">
       <h3 class="menu-toggle">
        菜单
       </h3>
       <a class="screen-reader-text skip-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/#content" title="跳至内容">
        跳至内容
       </a>
       <div class="menu-%e6%88%91%e7%9a%84%e8%8f%9c%e5%8d%95-container">
        <ul class="nav-menu" id="menu-%e6%88%91%e7%9a%84%e8%8f%9c%e5%8d%95">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-4746" id="menu-item-4746">
          <a href="http://cos.name">
           主页
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8120" id="menu-item-8120">
          <a href="http://cos.name/cn">
           论坛
          </a>
          <ul class="sub-menu">
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8124" id="menu-item-8124">
            <a href="http://cos.name/cn/wp-login.php?action=register">
             论坛注册
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8125" id="menu-item-8125">
            <a href="http://cos.name/cn/wp-login.php">
             论坛登录
            </a>
           </li>
          </ul>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8110" id="menu-item-8110">
          <a href="http://cos.name/books/">
           图书资料
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8112" id="menu-item-8112">
          <a href="http://cos.name/videos">
           视频教程
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8333" id="menu-item-8333">
          <a href="http://cos.name/salon/">
           统计沙龙
          </a>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8111" id="menu-item-8111">
          <a href="http://cos.name/chinar/">
           R语言会议
          </a>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8109" id="menu-item-8109">
          <a href="http://cos.name/training/">
           讲座与培训
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8115" id="menu-item-8115">
          <a href="http://cos.name/cn/forum/comprehensive/job/">
           招聘信息
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4780" id="menu-item-4780">
          <a href="http://cos.name/about">
           关于我们
          </a>
          <ul class="sub-menu">
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8113" id="menu-item-8113">
            <a href="http://cos.name/2008/11/how-to-work-with-cos/">
             加入我们
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8119" id="menu-item-8119">
            <a href="http://cos.name/donate/">
             赞助我们
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8114" id="menu-item-8114">
            <a href="http://cos.name/cn/forum/26">
             项目合作
            </a>
           </li>
          </ul>
         </li>
        </ul>
       </div>
       <form action="http://cos.name/" class="search-form" method="get" role="search">
        <label>
         <span class="screen-reader-text">
          搜索：
         </span>
        </label>
       </form>
      </nav>
      <!-- #site-navigation -->
     </div>
     <!-- #navbar -->
    </header>
    <!-- #masthead -->
    <div class="site-main" id="main">
     <div class="content-area" id="primary">
      <div class="site-content" id="content" role="main">
       <article class="post-1796 post type-post status-publish format-standard hentry category-optim-sim category-packages tag-cc tag-p tag-r-language tag-t tag-315 tag-312 tag-310 tag-313" id="post-1796">
        <header class="entry-header">
         <h1 class="entry-title">
          也谈提高R语言的运算效率
         </h1>
         <div class="entry-meta">
          <span class="date">
           <a href="http://cos.name/2009/12/improve-r-computation-efficiency/" rel="bookmark" title="链向也谈提高R语言的运算效率的固定链接">
            <time class="entry-date" datetime="2009-12-14T16:38:22+00:00">
             2009/12/14
            </time>
           </a>
          </span>
          <span class="categories-links">
           <a href="http://cos.name/category/computing/optim-sim/" rel="category tag">
            优化与模拟
           </a>
           、
           <a href="http://cos.name/category/software/packages/" rel="category tag">
            统计软件
           </a>
          </span>
          <span class="tags-links">
           <a href="http://cos.name/tag/cc/" rel="tag">
            C/C++
           </a>
           、
           <a href="http://cos.name/tag/p%e5%80%bc/" rel="tag">
            P值
           </a>
           、
           <a href="http://cos.name/tag/r-language/" rel="tag">
            R语言
           </a>
           、
           <a href="http://cos.name/tag/t%e6%a3%80%e9%aa%8c/" rel="tag">
            t检验
           </a>
           、
           <a href="http://cos.name/tag/%e5%90%91%e9%87%8f/" rel="tag">
            向量
           </a>
           、
           <a href="http://cos.name/tag/%e6%98%be%e5%bc%8f%e5%be%aa%e7%8e%af/" rel="tag">
            显式循环
           </a>
           、
           <a href="http://cos.name/tag/%e7%bb%9f%e8%ae%a1%e8%ae%a1%e7%ae%97/" rel="tag">
            统计计算
           </a>
           、
           <a href="http://cos.name/tag/%e9%9a%90%e5%bc%8f%e5%be%aa%e7%8e%af/" rel="tag">
            隐式循环
           </a>
          </span>
          <span class="author vcard">
           <a class="url fn n" href="http://cos.name/author/yihui/" rel="author" title="查看所有由谢益辉发布的文章">
            谢益辉
           </a>
          </span>
         </div>
         <!-- .entry-meta -->
        </header>
        <!-- .entry-header -->
        <div class="entry-content">
         <p>
          用过底层语言做计算的人转入R语言的时候一般都会觉得R语言的运算太慢，这是一个常见的对R的误解或者对R的设计的不理解。在二三十年前Chambers等一群人在贝尔实验室设计S语言之前，统计计算主要是通过那些底层语言实现的，典型的如Fortran。当时有一个基于Fortran的统计分析库，用它的麻烦就在于无论做什么样的数据分析，都涉及到一大摞繁琐的底层代码，这让数据分析变得很没劲，统计学家有统计学家的事情，天天陷在计算机程序代码中也不是个办法，要摆脱底层语言，那就只能设计高层语言了。有所得必有所失，众所周知，高层语言一般来说比底层语言低效，但对用户来说更友好。举个简单的例子，用C语言计算均值时，我们得对一个向量（数组）从头循环到尾把每个值累加起来，得到总和，然后除以向量的长度，而均值在统计当中简直是再家常便饭不过了，要是每次都要来这么个循环，大家也都甭干活儿了，天天写循环好了。
         </p>
         <p>
          前两天COS论坛上有个帖子提到“
          <a href="http://cos.name/bbs/read.php?tid=17601" target="_blank" title="http://cos.name/bbs/read.php?tid=17601">
           R语言的执行效率问题
          </a>
          ”，大意如下：
         </p>
         <blockquote>
          <p>
           有120000行数据，用perl写成12万行R命令做t.test，然后执行，大概几分钟就算完了。如果只用R语言，把所有数据先读入，然后用循环，每一行做t.test，花了几个小时，到现在还没有算完。这说明一个问题，在R里执行单行命令要比用循环快，涉及到循环的问题，最好写成单行命令执行。
          </p>
         </blockquote>
         <p>
          我不清楚作者是如何写这“12万行”R命令的，本文假设是把
          <code>
           t.test(dat[i, ]), i = 1, 2, ..., 120000
          </code>
          写入一个文件，然后用
          <code>
           source()
          </code>
          执行之。面对这样一个问题，我们有若干种改进计算的可能性。首先我们看“硬”写入程序代码的方法：
         </p>
         <pre class="brush: r">## 为了使计算可重复，设定随机数种子
set.seed(123)
## 生成数据，随机数，120000行 x 100列矩阵
dat = matrix(rnorm(120000 * 100), 120000)
nr = nrow(dat)
nc = ncol(dat)
## 六种方法的P值向量
p1 = p2 = p3 = p4 = p5 = p6 = numeric(nr)

## via source()
f = file("test.t")
writeLines(sprintf("p1[%d] = t.test(dat[%d, ])$p.value",
    seq(nr), seq(nr)), f)
system.time({
    source(f)
})
#   user  system elapsed
#  95.36    0.19   95.86
close(f)
unlink("test.t")</pre>
         <h1>
          1、向量式计算：
          <code>
           apply()
          </code>
          以及
          <code>
           *apply()
          </code>
         </h1>
         <p>
          当我们需要对矩阵的行或者列逐一计算时，
          <code>
           apply()
          </code>
          系列函数可能会提高效率。本例是对矩阵的行做t检验，那么可以这样计算：
         </p>
         <pre class="brush: r">## via apply()
system.time({
    p2 = apply(dat, 1, function(x) {
        t.test(x)$p.value
    })
})
#   user  system elapsed
#  63.12    0.06   63.50
identical(p1, p2)
# [1] TRUE</pre>
         <p>
          结果比第一种方法快了大约半分钟，而且计算结果完全一样。
          <code>
           apply()
          </code>
          本质上仍然是循环，但它在某些情况下比直接用显式循环要快：
         </p>
         <pre class="brush: r">## via for-loop
system.time({
    for (i in seq(nr)) p3[i] = t.test(dat[i, ])$p.value
})
#   user  system elapsed
#  69.88    0.03   70.05
identical(p2, p3)
# [1] TRUE</pre>
         <p>
          不过
          <code>
           apply()
          </code>
          系列函数在提高运算速度上优势并不会太明显，提倡用它的原因是它和统计中的矩阵运算相似，可以简化代码，相比起$\sum_{i=1}^n x_i/n$，我们可能更愿意看$\bar{x}$这样的表达式。很多R内置函数都是用底层语言写的，我们需要做的就是把一个对象作为整体传给函数去做计算，而不要自行把对象分解为一个个小部分计算，这个例子可能更能体现向量式计算的思想：
         </p>
         <pre class="brush: r">system.time(apply(dat, 1, mean))
#   user  system elapsed
#   5.28    0.04    5.25
system.time({
    x = numeric(nr)
    for (i in 1:nr) x[i] = mean(dat[i, ])
})
#   user  system elapsed
#   4.44    0.02    4.42
system.time(rowMeans(dat))
#   user  system elapsed
#   0.11    0.00    0.13</pre>
         <h1>
          2、明确计算的目的
         </h1>
         <p>
          很多情况下，R函数返回的不仅仅是一个数字作为结果，而是会得到一系列诸如统计量、P值、各种系数等对象，在我们调用R函数之前如果能想清楚我们究竟需要什么，也许对计算的速度提升有帮助。比如本例中，也许我们仅需要12万个双边P值，其它数字我们都用不着，那么可以考虑“手工”计算P值：
         </p>
         <pre class="brush: r">## "hand" calculation in R
system.time({
    p4 = 2 * pt(apply(dat, 1, function(x, mu = 0) -abs((mean(x) -
        mu)/sqrt(var(x)/nc))), nc - 1)
})
#   user  system elapsed
#  15.97    0.07   16.08
identical(p3, p4)
# [1] TRUE</pre>
         <p>
          上面的计算更“纯净”，所以计算速度有了本质的提升，而且计算的结果和前面毫无差异。在做计算之前，人的脑子多思考一分钟，也许计算机的“脑子”会少转一个小时。
         </p>
         <h1>
          3、把四则运算交给底层语言
         </h1>
         <p>
          R是高层语言，把它拿来做简单的四则运算是很不划算的，而且容易导致程序低效。加加减减的活儿是C和Fortran等底层语言的强项，所以可以交给它们去做。以下我们用一段C程序来计算t统计量，然后用
          <code>
           R CMD SHLIB
          </code>
          将它编译为
          <code>
           dll
          </code>
          （Windows）或
          <code>
           so
          </code>
          （Linux）文件，并加载到R中，用
          <code>
           .C()
          </code>
          调用，最终用R函数
          <code>
           pt()
          </code>
          计算P值：
         </p>
         <pre class="brush: r">## "hand" calculation in C for t-statistic
writeLines("#include &lt;math.h&gt;

void calc_tstat(double *x, int *nr, int *nc, double *mu, double *tstat)
{
    int i, j;
    double sum = 0.0, sum2 = 0.0, mean, var;
    for (i = 0; i &lt; *nr; i++) {
        for (j = 0; j &lt; *nc; j++) {
            sum += x[i + j * *nr];
        }
        mean = sum / (double) *nc;
        sum = 0.0;
        for (j = 0; j &lt; *nc; j++) {
            sum2 += (x[i + j * *nr] - mean) * (x[i + j * *nr] - mean);
        }
        var = sum2 / (double) (*nc - 1);
        sum2 = 0.0;
        tstat[i] = (mean - *mu) / sqrt(var / (*nc - 1));
    }
}", "calc_tstat.c")
system("R CMD SHLIB calc_tstat.c")
dyn.load(sprintf("calc_tstat%s", .Platform$dynlib.ext))
system.time({
    p5 = 2 * pt(-abs(.C("calc_tstat", as.double(dat), nr, nc,
        0, double(nrow(dat)))[[5]]), nc - 1)
})
#   user  system elapsed
#   0.86    0.06    0.92
dyn.unload(sprintf("calc_tstat%s", .Platform$dynlib.ext))</pre>
         <p>
          因为R可以用
          <code>
           system()
          </code>
          调用系统命令，所以整个过程全都可以用R完成，Windows用户需要安装
          <a href="http://www.murdoch-sutherland.com/Rtools/" target="_blank" title="http://www.murdoch-sutherland.com/Rtools/">
           Rtools
          </a>
          并设置系统环境变量
          <code>
           PATH
          </code>
          才能使用
          <code>
           R CMD SHLIB
          </code>
          。
         </p>
         <p>
          更进一步，因为R自身的一些C程序也是可供用户的C程序调用的，所以我们可以把整个P值的计算过程全都扔进C代码中，一步完成：
         </p>
         <pre class="brush: r">## "hand" calculation in C calling Rmath.h
writeLines("#include &lt;Rmath.h&gt;
void calc_pvalue(double *x, int *nr, int *nc, double *mu, double *pval)
{
    int i, j;
    double sum = 0.0, sum2 = 0.0, mean, var;
    for (i = 0; i &lt; *nr; i++) {
        for (j = 0; j &lt; *nc; j++) {
            sum += x[i + j * *nr];
        }
        mean = sum / (double) *nc;
        sum = 0.0;
        for (j = 0; j &lt; *nc; j++) {
            sum2 += (x[i + j * *nr] - mean) * (x[i + j * *nr] - mean);
        }
        var = sum2 / (double) (*nc - 1);
        sum2 = 0.0;
        pval[i] = 2 * pt(-fabs((mean - *mu) / sqrt(var / (*nc - 1))),
                      (double) (*nc - 1), 1, 0);
    }
}", "calc_pvalue.c")
system("R CMD SHLIB calc_pvalue.c")
dyn.load(sprintf("calc_pvalue%s", .Platform$dynlib.ext))
system.time({
    p6 = .C("calc_pvalue", as.double(dat), nr, nc, as.double(0),
        double(nrow(dat)))[[5]]
})
#   user  system elapsed
#   0.83    0.07    0.91
dyn.unload(sprintf("calc_pvalue%s", .Platform$dynlib.ext))</pre>
         <p>
          头文件
          <code>
           Rmath.h
          </code>
          的引入使得我们可以调用很多基于C程序的R函数，详情参考手册Writing R Extensions。通过C计算出来的P值和前面用R算的略有差异，下面画出
          <code>
           p6 - p1
          </code>
          vs
          <code>
           p1
          </code>
          以及
          <code>
           p6 - p5
          </code>
          vs
          <code>
           p5
          </code>
          的图：
         </p>
         <figure class="wp-caption aligncenter" id="attachment_1802" style="width: 480px">
          <a href="http://cos.name/wp-content/uploads/2009/12/p-values-error.png">
           <img src="http://cos.name/wp-content/uploads/2009/12/p-values-error.png"/>
          </a>
          <figcaption class="wp-caption-text">
           P值的差异
          </figcaption>
         </figure>
         <p>
          导致差异的原因此处不细究，感兴趣的读者可以帮忙检查一下。
         </p>
         <h1>
          小结
         </h1>
         <ol>
          <li>
           若你熟悉底层语言，计算又不太复杂，那么可用底层语言写，然后用R调之；
          </li>
          <li>
           否则把R对象当做整体去计算，能做
           <code>
            x + 1
           </code>
           就不要做
           <code>
            for (i in length(x)) x[i] + 1
           </code>
          </li>
          <li>
           不要低估R core们的编程水平，他们已经做了很多工作让用户脱离底层编程
          </li>
         </ol>
         <p>
          注：本文中的运算时间可能不可重复，这与计算机所处的状态有关，但大体来说，运算速度的快慢是可以肯定的。本文仅仅是关于统计计算的一个微小的例子，以后若有更好的例子，可能会更新本文；也欢迎各位提供更多示例。
         </p>
         <div class="wumii-hook">
          <br/>
          <br/>
         </div>
        </div>
        <!-- .entry-content -->
        <footer class="entry-meta">
         <div class="author-info">
          <div class="author-avatar">
           <img src="http://sdn.geekzu.org/avatar/1022d8e6ebc94e8f6bca9a86cebe312a?s=74&amp;d=monsterid&amp;r=g"/>
          </div>
          <!-- .author-avatar -->
          <div class="author-description">
           <h2 class="author-title">
            关于谢益辉
           </h2>
           <p class="author-bio">
            RStudio码了个工，Iowa State University统计系博了个士。统计之都网站创办者；研究兴趣为统计图形及数据可视化，对统计模型方法的发展感兴趣但不喜欢纯粹抽象的数学理论，以直观、实用为学习标准；偏好以R语言为工具；Email：xie@yihui.name；个人主页：
            <a href="http://yihui.name">
             http://yihui.name
            </a>
            <a class="author-link" href="http://cos.name/author/yihui/" rel="author">
             查看所有由谢益辉发表的文章
             <span class="meta-nav">
              →
             </span>
            </a>
           </p>
          </div>
          <!-- .author-description -->
         </div>
         <!-- .author-info -->
        </footer>
        <!-- .entry-meta -->
       </article>
       <!-- #post -->
       <nav class="navigation post-navigation" role="navigation">
        <h1 class="screen-reader-text">
         文章导航
        </h1>
        <div class="nav-links">
         <a href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/" rel="prev">
          <span class="meta-nav">
           ←
          </span>
          用R也能做精算—actuar包学习笔记（一）
         </a>
         <a href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/" rel="next">
          第二届中国R语言会议纪要
          <span class="meta-nav">
           →
          </span>
         </a>
        </div>
        <!-- .nav-links -->
       </nav>
       <!-- .navigation -->
       <div class="comments-area" id="comments">
        <h2 class="comments-title">
         《
         <span>
          也谈提高R语言的运算效率
         </span>
         》有18个想法
        </h2>
        <ol class="comment-list">
         <li class="comment byuser comment-author-yixuanq even thread-even depth-1" id="comment-1071">
          <article class="comment-body" id="div-comment-1071">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/f09663fd5fc04bad5e5b09daddb86fe6?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              邱怡轩
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1071">
              <time datetime="2009-12-14T18:04:12+00:00">
               2009/12/14 18:04
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             感谢师兄的这篇文章！也希望大家能把自己编程中提高效率的一些经验与大家进行分享。
             <br/>
             此外我记得R中有一个包叫做inline，它其实就是简化了上面的writeLines()和system()的操作，通过写临时文件和删临时文件并调用系统命令来编译C程序。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给邱怡轩" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1071#respond" onclick='return addComment.moveForm( "div-comment-1071", "1071", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-odd thread-alt depth-1" id="comment-1074">
          <article class="comment-body" id="div-comment-1074">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/34e0143fb09d6f1a82876586307be50c?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              huang shuai
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1074">
              <time datetime="2009-12-16T04:12:14+00:00">
               2009/12/16 04:12
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             赞
             <br/>
             用C写 加加减减 的程序, 尤其是矩阵计算里要用的加加减减, 速度确实提高很多.
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给huang shuai" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1074#respond" onclick='return addComment.moveForm( "div-comment-1074", "1074", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment even thread-even depth-1" id="comment-1077">
          <article class="comment-body" id="div-comment-1077">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/66aa115466aeedf71937ff80c00b7982?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://www.road2stat.com" rel="external nofollow">
               Nan.Xiao
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1077">
              <time datetime="2009-12-17T01:27:03+00:00">
               2009/12/17 01:27
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             很多时候也许是因为我们没有很好地定义问题 导致效率的降低 ..
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给Nan.Xiao" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1077#respond" onclick='return addComment.moveForm( "div-comment-1077", "1077", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-odd thread-alt depth-1 parent" id="comment-1086">
          <article class="comment-body" id="div-comment-1086">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/8eac6de01856f21023a1fc3b6276f062?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              lyxmoo
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1086">
              <time datetime="2009-12-18T21:36:29+00:00">
               2009/12/18 21:36
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             再有R 的核心还应该有改进的余地，我粗粗的看了一下， src/main/names.c 中
            </p>
            <p>
             attribute_hidden FUNTAB R_FunTab[] 这个结构在使用的时候，是通过
            </p>
            <p>
             for 循环进行比较 R_FunTab.name 的， 这个循环方式不经济，
            </p>
            <p>
             可以通过 hash R_FunTab.name 的方式，快速定位，这样就快了点点，
            </p>
            <p>
             不过这个改进还只是治标的小改动。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给lyxmoo" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1086#respond" onclick='return addComment.moveForm( "div-comment-1086", "1086", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
          <ol class="children">
           <li class="comment byuser comment-author-yixuanq even depth-2 parent" id="comment-1090">
            <article class="comment-body" id="div-comment-1090">
             <footer class="comment-meta">
              <div class="comment-author vcard">
               <img src="http://sdn.geekzu.org/avatar/f09663fd5fc04bad5e5b09daddb86fe6?s=74&amp;d=monsterid&amp;r=g"/>
               <b class="fn">
                邱怡轩
               </b>
               <span class="says">
                说道：
               </span>
              </div>
              <!-- .comment-author -->
              <div class="comment-metadata">
               <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1090">
                <time datetime="2009-12-19T09:24:49+00:00">
                 2009/12/19 09:24
                </time>
               </a>
              </div>
              <!-- .comment-metadata -->
             </footer>
             <!-- .comment-meta -->
             <div class="comment-content">
              <p>
               我觉得当R的影响力足够大的时候，肯定会有一批人专门来研究怎么提高核心代码的效率的，就像是S语言一代一代的更新。
              </p>
              <p>
               另：这位就是多次跟师兄提及的牟先生哦，呵呵。
              </p>
             </div>
             <!-- .comment-content -->
             <div class="reply">
              <a aria-label="回复给邱怡轩" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1090#respond" onclick='return addComment.moveForm( "div-comment-1090", "1090", "respond", "1796" )' rel="nofollow">
               回复
              </a>
             </div>
            </article>
            <!-- .comment-body -->
            <ol class="children">
             <li class="comment odd alt depth-3" id="comment-1095">
              <article class="comment-body" id="div-comment-1095">
               <footer class="comment-meta">
                <div class="comment-author vcard">
                 <img src="http://sdn.geekzu.org/avatar/8eac6de01856f21023a1fc3b6276f062?s=74&amp;d=monsterid&amp;r=g"/>
                 <b class="fn">
                  lyxmoo
                 </b>
                 <span class="says">
                  说道：
                 </span>
                </div>
                <!-- .comment-author -->
                <div class="comment-metadata">
                 <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1095">
                  <time datetime="2009-12-20T00:57:40+00:00">
                   2009/12/20 00:57
                  </time>
                 </a>
                </div>
                <!-- .comment-metadata -->
               </footer>
               <!-- .comment-meta -->
               <div class="comment-content">
                <p>
                 当时我要提自己事情主要是担心只报了上海而不能参加北京活动（不规则的参与者的行动或给组织者造成了麻烦）。我在统计学领域还只是幼儿园级别，特别感谢各位能够提供机会让我能够学习。
                </p>
               </div>
               <!-- .comment-content -->
              </article>
              <!-- .comment-body -->
             </li>
             <!-- #comment-## -->
             <li class="comment byuser comment-author-yihui bypostauthor even depth-3" id="comment-1099">
              <article class="comment-body" id="div-comment-1099">
               <footer class="comment-meta">
                <div class="comment-author vcard">
                 <img src="http://sdn.geekzu.org/avatar/1022d8e6ebc94e8f6bca9a86cebe312a?s=74&amp;d=monsterid&amp;r=g"/>
                 <b class="fn">
                  <a class="url" href="http://yihui.name" rel="external nofollow">
                   谢益辉
                  </a>
                 </b>
                 <span class="says">
                  说道：
                 </span>
                </div>
                <!-- .comment-author -->
                <div class="comment-metadata">
                 <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1099">
                  <time datetime="2009-12-20T16:01:23+00:00">
                   2009/12/20 16:01
                  </time>
                 </a>
                </div>
                <!-- .comment-metadata -->
               </footer>
               <!-- .comment-meta -->
               <div class="comment-content">
                <p>
                 哦，谢谢相告，我之前还搜了好半天邮件，人名和ID对不起来了。也谢谢lyxmoo的热心支持！
                </p>
               </div>
               <!-- .comment-content -->
              </article>
              <!-- .comment-body -->
             </li>
             <!-- #comment-## -->
            </ol>
            <!-- .children -->
           </li>
           <!-- #comment-## -->
          </ol>
          <!-- .children -->
         </li>
         <!-- #comment-## -->
         <li class="comment byuser comment-author-kimboo odd alt thread-even depth-1 parent" id="comment-1087">
          <article class="comment-body" id="div-comment-1087">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/10f658f78171d411d1fc1e9a86c4ab2e?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              李皞
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1087">
              <time datetime="2009-12-19T00:31:34+00:00">
               2009/12/19 00:31
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             请问师兄为什么我直接运行第一段代码显示的是
            </p>
            <pre class="brush: r">用户 系统 流逝 
   0    0    0 </pre>
            <p>
             需要做什么改动吗？另外test.t是什么格式？
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给李皞" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1087#respond" onclick='return addComment.moveForm( "div-comment-1087", "1087", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
          <ol class="children">
           <li class="comment byuser comment-author-yihui bypostauthor even depth-2" id="comment-1088">
            <article class="comment-body" id="div-comment-1088">
             <footer class="comment-meta">
              <div class="comment-author vcard">
               <img src="http://sdn.geekzu.org/avatar/1022d8e6ebc94e8f6bca9a86cebe312a?s=74&amp;d=monsterid&amp;r=g"/>
               <b class="fn">
                <a class="url" href="http://yihui.name" rel="external nofollow">
                 谢益辉
                </a>
               </b>
               <span class="says">
                说道：
               </span>
              </div>
              <!-- .comment-author -->
              <div class="comment-metadata">
               <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1088">
                <time datetime="2009-12-19T00:45:31+00:00">
                 2009/12/19 00:45
                </time>
               </a>
              </div>
              <!-- .comment-metadata -->
             </footer>
             <!-- .comment-meta -->
             <div class="comment-content">
              <p>
               That’s an arbitrary file name; you can name it as anything you want, e.g.
               <code>
                ttest.txt
               </code>
               . It is a pure text file.
              </p>
              <p>
               I’ve tested the code under both Windows and Linux, so it should not be a problem with the computation. I guess the problem is whether you have enough privilege to write a file to your working directory
               <code>
                getwd()
               </code>
               . (AFAIK, in Win7 or Vista there can be problems to access your C disk.)
              </p>
             </div>
             <!-- .comment-content -->
             <div class="reply">
              <a aria-label="回复给谢益辉" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1088#respond" onclick='return addComment.moveForm( "div-comment-1088", "1088", "respond", "1796" )' rel="nofollow">
               回复
              </a>
             </div>
            </article>
            <!-- .comment-body -->
           </li>
           <!-- #comment-## -->
          </ol>
          <!-- .children -->
         </li>
         <!-- #comment-## -->
         <li class="comment byuser comment-author-kimboo odd alt thread-odd thread-alt depth-1 parent" id="comment-1091">
          <article class="comment-body" id="div-comment-1091">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/10f658f78171d411d1fc1e9a86c4ab2e?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              李皞
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1091">
              <time datetime="2009-12-19T09:48:50+00:00">
               2009/12/19 09:48
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             The version of R in my computer is REvolution R 1.3.0. Now I have changed to the newest R version 2.10.1 to test the same code. The problem dispeared! Maybe there is something in relation to the function source(). When using REvovlution, it create a file n my hard disk. However when sourcing it, there is nothing in computation, at the same time, the file size become to be 0 kb…
             <br/>
             PS:My OS is Windows XP SP3.
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给李皞" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1091#respond" onclick='return addComment.moveForm( "div-comment-1091", "1091", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
          <ol class="children">
           <li class="comment byuser comment-author-yihui bypostauthor even depth-2" id="comment-1092">
            <article class="comment-body" id="div-comment-1092">
             <footer class="comment-meta">
              <div class="comment-author vcard">
               <img src="http://sdn.geekzu.org/avatar/1022d8e6ebc94e8f6bca9a86cebe312a?s=74&amp;d=monsterid&amp;r=g"/>
               <b class="fn">
                <a class="url" href="http://yihui.name" rel="external nofollow">
                 谢益辉
                </a>
               </b>
               <span class="says">
                说道：
               </span>
              </div>
              <!-- .comment-author -->
              <div class="comment-metadata">
               <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1092">
                <time datetime="2009-12-19T10:20:18+00:00">
                 2009/12/19 10:20
                </time>
               </a>
              </div>
              <!-- .comment-metadata -->
             </footer>
             <!-- .comment-meta -->
             <div class="comment-content">
              <p>
               这样看来可能是REvolution对连接（
               <code>
                ?connection
               </code>
               ）的处理还有所欠缺，R里面很多函数都支持各种连接，通过文件名访问文件只是最基础的一种，其它方式包括socket、URL、gzip等。我猜的话，
               <code>
                source('test.t')
               </code>
               应该是可以运行的。
              </p>
             </div>
             <!-- .comment-content -->
             <div class="reply">
              <a aria-label="回复给谢益辉" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1092#respond" onclick='return addComment.moveForm( "div-comment-1092", "1092", "respond", "1796" )' rel="nofollow">
               回复
              </a>
             </div>
            </article>
            <!-- .comment-body -->
           </li>
           <!-- #comment-## -->
          </ol>
          <!-- .children -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-even depth-1" id="comment-1139">
          <article class="comment-body" id="div-comment-1139">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/23e1a080e5b4e8dd18f14d65d651f38d?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              yfyang
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1139">
              <time datetime="2009-12-30T12:19:55+00:00">
               2009/12/30 12:19
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             用R做像EM之类的处理通常很痛苦。问题就在循环、四则运算、拷贝等问题上面。因为R语言是变量和LISP语言一样，是一张表(当然也可以描述成树)。
             <br/>
             普通的一个
             <br/>
             A&lt;-matrix(runif(100),nrow=10);
             <br/>
             对
             <br/>
             B&lt;-A
             <br/>
             和
             <br/>
             for (i in 1:10) {for (j in 1:10) B[i,j]=A[i,j]}
             <br/>
             可是差得太多的。虽然，如果写成Fortran或者C++，那是一样的东西。问题出在R是解释语言，不是编译后的东西（Python的速度可能要例外）。
             <br/>
             可以想见的结果就是通常的代数运算会很慢。通常的速度问题出现在矩阵操作上。
            </p>
            <p>
             至于使用较为底层的C/C++,F/F99,Pascal等，问题在于代码有的时候非常难写。比如说高维矩阵求逆，或者稀疏矩阵求广义逆等，这些是都是非常麻烦的。要牵涉到很复杂的算法、精度控制等(比方说双double精度)。
            </p>
            <p>
             R提供了一个很好的接口。R本身也是通过调用Lapack/BLAS等的功能完成上述矩阵的。但是这一点是操作系统相关的。上述的库在Win平台上是很麻烦的，甚至很多功能不兼容。比如(c)BLAS至今有很多功能也不能和VS2005等Win上主流C/C++编译器兼容。所以，打开R的etc，我们发现实际上用的是GCC完成代码编译的(编译选项是 -O2, 会的同学可以试图改成 -O2 -march=[视CPU而定]。运算速度有时能提高不少。 )
            </p>
            <p>
             所以我的建议是，在进行这种复杂操作时：
             <br/>
             1.  底层语言和R语言混合编程，事实上，同样的问题存在于Octave/Matlab(R)上面；
             <br/>
             2.  重要项目用LAPACK等开源库完成代码，写成R的包；
             <br/>
             3.  如果能换平台，用Xuinx类系统，这样执行效率要高很多，也能突破内存限制。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给yfyang" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1139#respond" onclick='return addComment.moveForm( "div-comment-1139", "1139", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment even thread-odd thread-alt depth-1 parent" id="comment-1208">
          <article class="comment-body" id="div-comment-1208">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/28bf4dc6c494e0d9a136b79928668e07?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              zong0jie
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1208">
              <time datetime="2010-02-15T00:05:54+00:00">
               2010/02/15 00:05
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             在R2.10里面貌似循环速度大大加快，只比apply慢了300%，几分钟时间完全可以接受了。
             <br/>
             我机器，笔记本酷睿2 t7300 主频2.0GHz 内存ddr2 667 2G
             <br/>
             也搞了18万行的循环做个小测试
            </p>
            <p>
             &gt; b=rep(0,1800)#这里当时打错了，不过R能自动扩展向量长度的嘛
             <br/>
             &gt; a=matrix(rnorm(900000,10,1),nc=5)
             <br/>
             &gt; system.time(for(i in 1:180000){b[i]=t.test(a[i,])})
             <br/>
             用户   系统   流逝
             <br/>
             331.36   2.49 339.83
             <br/>
             警告多于50个(用warnings()来显示第一个到第五十个)
             <br/>
             &gt; system.time(b&lt;-apply(a,1,t.test))
             <br/>
             用户   系统   流逝
             <br/>
             102.81   0.06 103.20
            </p>
            <p>
             现在看来已经没有几个小时那么夸张了嘛，多等两分钟问题不是很大吧。这时候程序可读性貌似更重要，因为自我感觉向量化会让语句看起来比较累，然后这样可以把精力放在解决具体问题上而不是如何搞向量化……我是菜鸟了，意见仅供参考。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给zong0jie" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1208#respond" onclick='return addComment.moveForm( "div-comment-1208", "1208", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
          <ol class="children">
           <li class="comment odd alt depth-2" id="comment-1209">
            <article class="comment-body" id="div-comment-1209">
             <footer class="comment-meta">
              <div class="comment-author vcard">
               <img src="http://sdn.geekzu.org/avatar/28bf4dc6c494e0d9a136b79928668e07?s=74&amp;d=monsterid&amp;r=g"/>
               <b class="fn">
                zong0jie
               </b>
               <span class="says">
                说道：
               </span>
              </div>
              <!-- .comment-author -->
              <div class="comment-metadata">
               <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1209">
                <time datetime="2010-02-15T00:10:19+00:00">
                 2010/02/15 00:10
                </time>
               </a>
              </div>
              <!-- .comment-metadata -->
             </footer>
             <!-- .comment-meta -->
             <div class="comment-content">
              <p>
               补充一点，系统是xp sp3。 类似测试在fedora 12下也进行过，结果依然类似。
              </p>
             </div>
             <!-- .comment-content -->
             <div class="reply">
              <a aria-label="回复给zong0jie" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1209#respond" onclick='return addComment.moveForm( "div-comment-1209", "1209", "respond", "1796" )' rel="nofollow">
               回复
              </a>
             </div>
            </article>
            <!-- .comment-body -->
           </li>
           <!-- #comment-## -->
          </ol>
          <!-- .children -->
         </li>
         <!-- #comment-## -->
         <li class="comment byuser comment-author-abel even thread-even depth-1" id="comment-1312">
          <article class="comment-body" id="div-comment-1312">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/c468db095e58c91e69864f2e58e98782?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              刘重杰
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1312">
              <time datetime="2010-04-02T18:47:14+00:00">
               2010/04/02 18:47
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             简单来说，R底层基本上都是C做的，调用的库也是久经考验的。
             <br/>
             程序运行的效率核心在于对语言提供的功能十分有足够的了解和体会，如果把base包中的内容认真仔细的通读下，再掌握常见运算的核心所在，相信就不会抱怨工具的问题——相对来说R对计算方面考虑的已经非常好了。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给刘重杰" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=1312#respond" onclick='return addComment.moveForm( "div-comment-1312", "1312", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-odd thread-alt depth-1" id="comment-2282">
          <article class="comment-body" id="div-comment-2282">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/497ea247993bf5d350c9aa7796c6eb81?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://www.shamoxia.com" rel="external nofollow">
               丕子
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-2282">
              <time datetime="2011-07-09T21:26:11+00:00">
               2011/07/09 21:26
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             嗯 尽量避免通过R来对大量数据进行预处理 数据的一些预处理可以交给C或者Java 而用R只进行实验计算等
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给丕子" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=2282#respond" onclick='return addComment.moveForm( "div-comment-2282", "2282", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment even thread-even depth-1" id="comment-5388">
          <article class="comment-body" id="div-comment-5388">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://weibo.com/wukehao" rel="external nofollow">
               Conda
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-5388">
              <time datetime="2014-02-25T10:06:46+00:00">
               2014/02/25 10:06
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             提高R计算效率还有很多工作可做
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给Conda" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=5388#respond" onclick='return addComment.moveForm( "div-comment-5388", "5388", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-odd thread-alt depth-1" id="comment-7139">
          <article class="comment-body" id="div-comment-7139">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/25bb0e153b03f5fa3ad93292642bbc54?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              王阿郦
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-7139">
              <time datetime="2016-04-08T13:30:45+00:00">
               2016/04/08 13:30
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             请问dependent iteration（原谅我中英夹杂，因为我不知道怎么正确翻译）有什么好的解决方法了吗？实在是不想写for循环啊
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给王阿郦" class="comment-reply-link" href="http://cos.name/2009/12/improve-r-computation-efficiency/?replytocom=7139#respond" onclick='return addComment.moveForm( "div-comment-7139", "7139", "respond", "1796" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
        </ol>
        <!-- .comment-list -->
        <div class="comment-respond" id="respond">
         <h3 class="comment-reply-title" id="reply-title">
          发表评论
          <small>
           <a href="http://cos.name/2009/12/improve-r-computation-efficiency/#respond" id="cancel-comment-reply-link" rel="nofollow" style="display:none;">
            取消回复
           </a>
          </small>
         </h3>
         <form action="http://cos.name/wp-comments-post.php" class="comment-form" id="commentform" method="post" novalidate="">
          <p class="comment-notes">
           <span id="email-notes">
            电子邮件地址不会被公开。
           </span>
           必填项已用
           <span class="required">
            *
           </span>
           标注
          </p>
          <p class="comment-form-comment">
           <label for="comment">
            评论
           </label>
           <textarea aria-required="true" cols="45" id="comment" maxlength="65525" name="comment" required="required" rows="8">
           </textarea>
          </p>
          <p class="comment-form-author">
           <label for="author">
            姓名
            <span class="required">
             *
            </span>
           </label>
          </p>
          <p class="comment-form-email">
           <label for="email">
            电子邮件
            <span class="required">
             *
            </span>
           </label>
          </p>
          <p class="comment-form-url">
           <label for="url">
            站点
           </label>
          </p>
          <p class="form-submit">
          </p>
          <p style="display: none;">
          </p>
          <p style="display: none;">
          </p>
         </form>
        </div>
        <!-- #respond -->
       </div>
       <!-- #comments -->
      </div>
      <!-- #content -->
     </div>
     <!-- #primary -->
     <div class="sidebar-container" id="tertiary" role="complementary">
      <div class="sidebar-inner">
       <div class="widget-area">
        <aside class="widget widget_text" id="text-3">
         <h3 class="widget-title">
          关注统计之都
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            新浪微博
            <a href="http://weibo.com/cosname">
             @统计之都
            </a>
           </li>
           <li>
            人人网
            <a href="http://renren.com/cosname">
             @统计之都
            </a>
           </li>
           <li>
            Twitter
            <a href="http://twitter.com/cos_name">
             @cos_name
            </a>
           </li>
          </ul>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-6">
         <h3 class="widget-title">
          微信公众平台
         </h3>
         <div class="textwidget">
          <img src="http://cos.name/wp-content/uploads/2013/04/qrcode-8cm.jpg"/>
          <p style="font-size:12px;margin-left:15px">
           微信号 CapStat
          </p>
          <p>
           我们将第一时间向您推送主站和论坛的精彩内容，以及统计之都的线下活动、竞赛、培训和会议信息。
          </p>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-8">
         <h3 class="widget-title">
          站内导航
         </h3>
         <div class="textwidget">
          <ul>
           <li class="page_item">
            <a href="http://cos.name/cn/">
             中文论坛
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/videos/">
             视频
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/salon/">
             统计沙龙
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/books/">
             图书出版
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/training/">
             教育培训
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/about/">
             关于我们
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/donate/">
             捐赠
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/chinar/">
             R语言会议
            </a>
           </li>
          </ul>
         </div>
        </aside>
        <aside class="widget widget_links" id="linkcat-2">
         <h3 class="widget-title">
          友情链接
         </h3>
         <ul class="xoxo blogroll">
          <li>
           <a href="http://stat.ruc.edu.cn" target="_blank" title="中国人民大学统计学院网站">
            中国人民大学统计学院
           </a>
          </li>
          <li>
           <a href="http://rucdmc.net">
            中国人民大学数据挖掘中心
           </a>
          </li>
          <li>
           <a href="http://birc.gsm.pku.edu.cn/" target="_blank">
            北京大学商务智能研究中心
           </a>
          </li>
          <li>
           <a href="http://sam.cufe.edu.cn/" target="_blank" title="中央财经大学统计与数学学院网站">
            中央财经大学统计与数学学院
           </a>
          </li>
          <li>
           <a href="http://tjx.cueb.edu.cn/" target="_blank" title="首都经济贸易大学统计学院网站">
            首经贸统计学院
           </a>
          </li>
          <li>
           <a href="http://www.shookr.com/">
            数客网大数据社区
           </a>
          </li>
          <li>
           <a href="http://www.xueqing.tv/" target="_blank" title="数据科学在线学习平台">
            雪晴数据网
           </a>
          </li>
          <li>
           <a href="http://iera.name/" target="_blank" title="IERA是一个旨在普及、传播和增进工业工程知识的非营利性网站">
            IERA（直通IE）
           </a>
          </li>
         </ul>
        </aside>
        <aside class="widget widget_categories" id="categories-2">
         <h3 class="widget-title">
          全部分类
         </h3>
         <label class="screen-reader-text" for="cat">
          全部分类
         </label>
         <select class="postform" id="cat" name="cat">
          <option value="-1">
           选择分类目录
          </option>
          <option class="level-0" value="925">
           cos访谈  (4)
          </option>
          <option class="level-0" value="659">
           图书出版  (5)
          </option>
          <option class="level-0" value="379">
           数学方法  (14)
          </option>
          <option class="level-1" value="381">
           分析与代数  (1)
          </option>
          <option class="level-1" value="380">
           概率论  (9)
          </option>
          <option class="level-1" value="382">
           随机过程  (5)
          </option>
          <option class="level-0" value="210">
           数据分析  (81)
          </option>
          <option class="level-1" value="203">
           多元统计  (3)
          </option>
          <option class="level-1" value="42">
           数据挖掘与机器学习  (42)
          </option>
          <option class="level-1" value="36">
           生物与医学统计  (17)
          </option>
          <option class="level-1" value="35">
           计量经济学  (4)
          </option>
          <option class="level-1" value="296">
           金融统计  (3)
          </option>
          <option class="level-1" value="303">
           风险精算  (7)
          </option>
          <option class="level-0" value="177">
           模型专题  (15)
          </option>
          <option class="level-1" value="38">
           回归分析  (10)
          </option>
          <option class="level-1" value="41">
           时间序列  (2)
          </option>
          <option class="level-0" value="784">
           每周精选  (24)
          </option>
          <option class="level-1" value="183">
           可视化  (9)
          </option>
          <option class="level-0" value="967">
           沙龙纪要  (3)
          </option>
          <option class="level-0" value="18">
           经典理论  (46)
          </option>
          <option class="level-1" value="37">
           抽样调查  (3)
          </option>
          <option class="level-1" value="4">
           统计推断  (26)
          </option>
          <option class="level-1" value="236">
           试验设计  (7)
          </option>
          <option class="level-1" value="39">
           非参数统计  (3)
          </option>
          <option class="level-0" value="1">
           统计之都  (279)
          </option>
          <option class="level-1" value="884">
           中国R会议  (2)
          </option>
          <option class="level-1" value="885">
           中国R语言会议  (5)
          </option>
          <option class="level-1" value="446">
           出国留学  (3)
          </option>
          <option class="level-1" value="179">
           推荐文章  (90)
          </option>
          <option class="level-1" value="3">
           新闻通知  (75)
          </option>
          <option class="level-1" value="263">
           统计刊物  (10)
          </option>
          <option class="level-1" value="174">
           网站导读  (40)
          </option>
          <option class="level-1" value="204">
           职业事业  (51)
          </option>
          <option class="level-1" value="213">
           高校课堂  (9)
          </option>
          <option class="level-0" value="178">
           统计计算  (28)
          </option>
          <option class="level-1" value="40">
           优化与模拟  (15)
          </option>
          <option class="level-1" value="43">
           贝叶斯方法  (6)
          </option>
          <option class="level-0" value="378">
           软件应用  (116)
          </option>
          <option class="level-1" value="44">
           统计图形  (36)
          </option>
          <option class="level-1" value="110">
           统计软件  (83)
          </option>
         </select>
        </aside>
        <aside class="widget widget_recent_comments" id="recent-comments-2">
         <h3 class="widget-title">
          最新评论
         </h3>
         <ul id="recentcomments">
          <li class="recentcomments">
           <span class="comment-author-link">
            fineboom
           </span>
           发表在《
           <a href="http://cos.name/2016/06/use-shiny-fleetly-set-up-visual-prototype-system/#comment-7317">
            利用shiny包快速搭建可视化原型系统
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            胡家新
           </span>
           发表在《
           <a href="http://cos.name/2016/06/r%e8%af%ad%e5%8d%83%e5%af%bb%e7%ac%ac%e4%b8%89%e6%9c%9f%ef%bc%9a%e5%bc%a0%e6%97%a0%e5%bf%8c%e7%a9%b6%e7%ab%9f%e7%88%b1%e8%b0%81%ef%bc%9f/#comment-7316">
            R语千寻第三期：张无忌究竟爱谁？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            <a class="url" href="http://www.zijiacha.com/category.php?id=6" rel="external nofollow">
             南糯山普洱茶
            </a>
           </span>
           发表在《
           <a href="http://cos.name/2016/06/r%e8%af%ad%e5%8d%83%e5%af%bb%e7%ac%ac%e4%b8%89%e6%9c%9f%ef%bc%9a%e5%bc%a0%e6%97%a0%e5%bf%8c%e7%a9%b6%e7%ab%9f%e7%88%b1%e8%b0%81%ef%bc%9f/#comment-7315">
            R语千寻第三期：张无忌究竟爱谁？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            J
           </span>
           发表在《
           <a href="http://cos.name/2016/05/value-of-the-reputation-from-the-data/#comment-7314">
            数据告诉你：高信誉的卖家应该收高价，还是收低价？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            <a class="url" href="http://gg" rel="external nofollow">
             Hilda
            </a>
           </span>
           发表在《
           <a href="http://cos.name/2013/01/drawing-map-in-r-era/#comment-7311">
            R时代，你要怎样画地图？
           </a>
           》
          </li>
         </ul>
        </aside>
        <aside class="widget widget_rss" id="rss-282869971">
         <h3 class="widget-title">
          <a class="rsswidget" href="http://cos.name/cn/topics/feed/">
           <img src="http://cos.name/wp-includes/images/rss.png"/>
          </a>
          <a class="rsswidget" href="http://cos.name/cn/topics/feed/">
           中文论坛新帖
          </a>
         </h3>
         <ul>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/417372/">
            处理时间数据和产生时间序列的问题
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/6790/">
            《统计陷阱》下载 （How to lie with statistics）
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/818/">
            统计学的世界（第五版）
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/16574/">
            class(x) 返回值值是AsIs,AsIs代表什么，有什么用处？
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/417366/">
            如何用R绘制一个分类算法的决策规则
           </a>
          </li>
         </ul>
        </aside>
        <aside class="widget widget_text" id="text-2">
         <h3 class="widget-title">
          登录/RSS
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            <a href="http://cos.name/wp-admin/">
             登录
            </a>
           </li>
           <li>
            <a href="http://cos.name/feed/" title="使用 RSS 2.0 同步站点内容">
             文章
             <abbr title="Really Simple Syndication">
              RSS
             </abbr>
            </a>
           </li>
           <li>
            <a href="http://cos.name/comments/feed/" title="RSS 上的最近评论">
             评论
             <abbr title="Really Simple Syndication">
              RSS
             </abbr>
            </a>
           </li>
          </ul>
         </div>
        </aside>
       </div>
       <!-- .widget-area -->
      </div>
      <!-- .sidebar-inner -->
     </div>
     <!-- #tertiary -->
    </div>
    <!-- #main -->
    <footer class="site-footer" id="colophon" role="contentinfo">
     <div class="site-info">
      版权所有 © 2014 统计之都 | 由
      <a href="http://wordpress.org/">
       WordPress
      </a>
      构建 | 主题修改自
      <a href="http://wordpress.org/themes/twentythirteen">
       Twenty Thirteen
      </a>
     </div>
     <!-- .site-info -->
    </footer>
    <!-- #colophon -->
   </div>
   <!-- #page -->
   <p style="margin:0;padding:0;height:1px;overflow:hidden;">
    <a href="http://www.wumii.com/widget/relatedItems" style="border:0;">
     <img src="http://static.wumii.cn/images/pixel.png"/>
    </a>
   </p>
  </div>
 </body>
</html>